package middleware

import (
	"github.com/gin-gonic/gin"
	"guard/internal/errors"
	"net/http"
)

// ErrHtmlHandler 处理错误用html
func ErrHtmlHandler(htmlName string) gin.HandlerFunc {
	return func(c *gin.Context) {
		// 1 暂停，做个标记
		c.Next()
		// 2 执行controller里的代码
		// 3 碰到return就执行这里
		err := errors.ErrorType(c)
		if err != nil {
			c.HTML(http.StatusOK, htmlName, gin.H{
				"error": err.Msg,
			})
			// 终止剩下的函数执行，和return不同，return直接结束，c.Abort让其它control继续
			c.Abort()
		}
	}
}

// ErrJsonHandler 全新的异常处理机制，给token url用的
func ErrJsonHandler(c *gin.Context) {
	// 1 暂停，做个标记
	c.Next()
	// 2 执行controller里的代码
	// 3 碰到return就执行这里
	err := errors.ErrorType(c)
	if err != nil {
		c.JSON(http.StatusOK, err)
		// 终止剩下的函数执行，和return不同，return直接结束，c.Abort让其它control继续
		c.Abort()
	}
}

// NotRouter 404
func NotRouter(c *gin.Context) {
	// 不需要针对某些请求，而使用特定的json返回，因为按照正常流程，是访问的通的，顺便减少判断，减少系统负担
	c.HTML(http.StatusOK, "error.html", gin.H{
		"error": "404 Not Found",
	})
}
